/*
 * IShoppingCartModel.java
 * business
 *
 * Created by ChenTao on 2016/9/9.
 *
 * Copyright (c) 2016年 yidiandao. All rights reserved.
 */

package com.yidiandao.business.data.model;

import com.yidiandao.business.data.bean.Goods;
import com.yidiandao.business.data.response.RecommendGoodsListResponse;
import com.yidiandao.business.ui.widget.listview.DisplayListItem;

import java.util.List;

/**
 * 购物车Model
 */
public interface IShoppingCartModel {

    interface OnLoadShoppingCartListListener {

        void onSuccess(List<DisplayListItem> displayListItems);

        void onFailed();
    }

    interface OnUpdateShoppingCartCountListener {

        void onSuccess();

        void onFailed();

        void onFinal();
    }

    interface OnShoppingCartOperatorListener {

        void onSuccess();

        void onFailed();
    }

    interface OnShoppingCartCheckStockAndPriceListener {

        void onSuccess();

        void onFailed();

        void onStockNotEnoughOrPriceChanged(String message);
    }

    interface OnLoadRecommendGoodsListener {

        void onSuccess(RecommendGoodsListResponse.Data data);

        void onFailed();
    }

    /**
     * 加载服务器购物车列表
     */
    void loadServerShoppingCartList(String tag, OnLoadShoppingCartListListener listener);

    /**
     * 删除购物车中选中的商品
     *
     * @param allGoodsCatIds 所有商品的cat_id拼接的字符串
     */
    void deleteGoodsFromServer(
            String allGoodsCatIds, String tag, OnShoppingCartOperatorListener listener);

    /**
     * 结算前先检查服务器的库存，价格
     *
     * @param goodsNumberAndPriceJson 商品、商品数量与价格的 json
     */
    void checkServerStockAndPrice(
            String tag,
            String goodsNumberAndPriceJson,
            OnShoppingCartCheckStockAndPriceListener listener);

    /**
     * 使用EventBus发送更新 购物车 页面UI的Event
     *
     * @param refreshShoppingCart 是否刷新购物车商品列表(与服务器同步)
     */
    void postRefreshShoppingCartState(boolean refreshShoppingCart);

    /**
     * 获取购物车推荐商品列表
     */
    void loadShoppingCartRecommendGoods(String tag, OnLoadRecommendGoodsListener listener);

    /**
     * 判断是否需要刷新购物车.默认需要
     */
    boolean needRefreshShoppingCart();

    /**
     * 设置是否需要刷新购物车
     */
    void setNeedRefreshShoppingCart(boolean refreshShoppingCart);

    /**
     * 更新单个订单的信息
     */
    void changeNumberByOne(Goods goods, String tag, OnUpdateShoppingCartCountListener listener);

    /**
     * 向服务器post购物车的信息
     *
     * @param recJson        商品json
     * @param favourableJson 赠品json
     */
    void postShoppingCartData(String pagerTag, String recJson, String favourableJson, OnShoppingCartOperatorListener listener);

}
